// 测试 cargo test
// 使用assert!检查测试结果
// assert_eq!和assert_ne!测试相等性
// should_panic检查代码是否恐慌
// 测试中使用Result<T,E>返回ok就是成功error就是失败
// 控制测试如何运行
// cargo test --help
// cargo test -- --help
// 并行串行测试: cargo test -- --test-threads=1使用一个线程
// 按照测试名称来测试：cargo test testFnName或者cargo test add这样可以运行add开头的测试
// 针对耗时的测试：#[ignore]忽略测试，单独测试被忽略的测试cargo test -- --ignored
// cfg：configuration(配置)：告诉rust下面的条目只有在指定的配置选项下才会被包含，配置test选项即运行测试
// 测试私有函数
// 集成测试
// tests目录和src同级只有在cargo test情况下才会编译这个文件夹
// cargo test --test 文件名，只会测试当前文件下的测试
// rust命名规范中，tests/common不会被视为单独的crate编译即不会编译这个文件下的内容

pub fn add (x: i32) -> i32 {
    return x + 2

}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    #[ignore]
    fn it_add_tow() {
        assert_eq!(4, add(2), "自定义错误消息");
    }
}

fn main() {
    println!("hello world");
}